package cn.edu.zsc.rbac.view;

import cn.edu.zsc.rbac.domain.service.IBaseService;
import cn.edu.zsc.rbac.domain.service.IDeptService;
import cn.edu.zsc.rbac.domain.vo.BaseVo;
import cn.edu.zsc.rbac.domain.vo.DeptVo;
import cn.edu.zsc.rbac.domain.vo.Result;
//这是一个抽象视图类（BaseView），用于构建基于控制台的通用交互逻辑，
//它通常作为其他具体视图类（如 UserView、RoleView 等）的基类。
public abstract class BaseView<Vo extends BaseVo, IService extends IBaseService> {
    //Vo：表示视图对象类型，必须继承自 BaseVo
    //IService：表示服务接口类型，必须实现 IBaseService
    IService service;//管理数据服务（IService）

    Vo[] cache;//缓存数据（Vo[]）

    void printError(String message) {
        System.out.println("\033[31m" + message + "\033[0m");
    }
    //打印红色错误信息（使用 ANSI 转义序列控制颜色）。
    //用于增强用户提示体验。
    Vo getCacheById() {//提供通用的用户输入处理方法（如 getCacheById()）
    //从用户输入中读取 ID，并在缓存中查找对应的 VO 对象。
        System.out.print("请输入ID，ID必须是大于0的整数：");

        if (!MainView.input.hasNextInt()) {// // 输入不是整数时，清空缓冲区并提示错误
            MainView.input.nextLine();
            printError("ID必须整数，请输入整数值");
            return null;
        }

        int id = MainView.input.nextInt();
        MainView.input.nextLine();

        if (id < 1) {
            printError("ID必须大于0，请重新输入");// // 提示 ID 必须大于 0
            return null;
        }

        if (cache == null) {
            Result result = service.list();
            cache = (Vo[]) result.data;
        }//如果缓存为空，则通过服务接口获取所有数据并缓存。

        Vo vo = null;
        for (Vo item : cache) {//查找指定 ID 的 VO 对象
            if (item.id == id) {//   // 找到后输出详情并返回
                System.out.println("该ID对应的数据是：");
                System.out.println(item);
                vo = item;
                break;
            }
        }

        if (vo == null) {
            printError("当前没有该ID对应的数据");
            return null;
        }

        return vo;
    }

}
